'''
# 模拟ATM机存取款案例
1.ATM机用户数据源建立
2.用户登录操作
3.查询用户卡内余额
4.用户取钱操作
5.用户存钱操作
6.退出操作到登录界面
7.交互界面设置
'''
# 为ATM机创建4个用户的源数据
ATM_data = [
    {'account':'12345678','password':'123456','name':'zhangsan','balance':'1000'},
    {'account':'11223344','password':'111333','name':'lisi','balance':'9000'},
    {'account':'99994444','password':'777888','name':'wangwu','balance':'13000'},
    {'account':'66668888','password':'000000','name':'zhaoliu','balance':'800'}]

# 用户登录函数
def Log_in(user_account,user_password):
    '''
    ①利用len函数将ATM_data变为一个可以以int型变量访问的列表；
    ②用变量user_id 遍历列表中每个元素（即字典）；
    ③再将ATM_data[user_id]看作字典，利用字典"键"的方式查找匹配元素
    '''
    for user_id in range(len(ATM_data)):
        # 判断用户输入的账号与密码是否匹配
         if user_account == ATM_data[user_id]['account'] and user_password == ATM_data[user_id]['password']:
             return user_id

# 查询余额操作
# 定义一个查询用户余额等信息的函数
def show_balance():
    print('{0:<20}{1:<20}{2:<20}'.format('uesr_account','user_name','user_balance'))
    print('{0:<20}{1:<20}{2:<20}'.format(ATM_data[user_id]['account'],ATM_data[user_id]['name'],ATM_data[user_id]['balance']))

# 取款操作
# 定义一个用户存款函数
def withdraw(amount):
    # 判断账户余额与用户输入的取款金额的差值，如果差值>=0，执行取款操作
    n = int(ATM_data[user_id]['balance']) - int(amount)
    if n>=0:
        # 将取款后的余额重新赋值給账户余额
        ATM_data[user_id]['balance'] = n
        print('='*15,'取款成功','='*15)
        print('您的账户余额为：',n)
    else:
        # 差值<0，则提示用户余额不足，并重新调用取款函数
        amount = input('您的余额不足，请重新输入取款金额:')
        withdraw(amount)

# 存钱操作
def deposit(amount):
    n = int(ATM_data[user_id]['balance']) + int(amount)
    ATM_data[user_id]['balance'] = n
    print('您当前账户余额为：',n)


# 退出操作
def Logoff():
    print('='*15,'再见！欢迎下次使用','='*15)
    return

# 用户界面定义
while True :
    print('='*15,'欢迎使用CSDN ATM','='*15)
    # print('请输入您的银行卡号：')
    # print('请输入您的账户密码：')
    user_account  = input('请输入您的银行卡号：')
    user_password  = input('请输入您的账户密码：')
    # 调用用户登录函数
    Log_in(user_account,user_password)
    user_id = Log_in(user_account,user_password)
    if user_id != None:
        print('登录成功')
        while True:
            print('=' * 15, '用户选择界面', '=' * 15)
            print('{0:}{1:18}{2:10}'.format('', '1.查询余额', '2.取款'))
            print('{0:}{1:20}{2:10}'.format('', '3.存款', '4.退出'))
            key = input('请选择您需要的操作')
            if key == '1':
                print('='*15,'用户余额信息','='*15)
                show_balance()
                user_key = input('请按回车键返回用户操作界面:')
                if user_key == '/r':
                    break
            elif key == '2':
                print('=' * 15, '用户取款窗口', '=' * 15)
                print('您的账户余额为：',ATM_data[user_id]['balance'])
                amount = input('请输入取款金额：')
                withdraw(amount)
                while True:
                    print('继续取款请按1，按其它键返回用户选择界面')
                    withdraw_key = input('请按键选择：')
                    if withdraw_key == '1':
                        print('=' * 15, '用户取款窗口', '=' * 15)
                        print('您的账户余额为：', ATM_data[user_id]['balance'])
                        amount = input('请输入取款金额：')
                        withdraw(amount)
                    else:
                        break
            elif key == '3':
                print('=' * 15, '用户存款窗口', '=' * 15)
                print('您当前的账户余额为：',ATM_data[user_id]['balance'])
                amount = input('您存入的金额为：')
                deposit(amount)
                user_key = input('请按回车键返回用户操作界面:')
                if user_key == '/r':
                    break
            elif key == '4':
                Logoff()
                break

            else:
                print('操作无效，请重新输入')
    else:
        print('用户名或密码不正确，请您重新输入')
        Log_in(user_account, user_password)